package Modelo.ObjetosDAO.Implementaciones;

import static org.junit.Assert.*;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;











import java.util.Vector;

import org.junit.*;
import org.junit.runner.RunWith;

import LogicaDeNegocio.GestionDeUsuarios;
import Modelo.Entidades.ClaseLicencia;
import Modelo.Entidades.Estado;
import Modelo.Entidades.GrupoSanguineo;
import Modelo.Entidades.Licencia;
import Modelo.Entidades.Rol;
import Modelo.Entidades.TipoDocumento;
import Modelo.Entidades.TipoEmision;
import Modelo.Entidades.Titular;
import Modelo.Entidades.Usuario;
import Modelo.ObjetosDAO.Interfases.ITitularDAO;
import Modelo.ObjetosDAO.Interfases.IUsuarioDAO;

public class Testing{

	private TitularDAO titularDAO= new TitularDAO();
	private UsuarioDAO usuarioDAO= new UsuarioDAO();
	private SistemaDAO sistemaDAO= new SistemaDAO();
	private LicenciaDAO licenciaDAO= new LicenciaDAO();

	private TipoDocumento tipoDocumento;
	private GrupoSanguineo grupoSanguineo; 
	private ClaseLicencia claseLicencia;
	private Titular t;
	private Usuario user, newUser;
	
	private Licencia licencia;
	private TipoEmision tipoEmision;
	private Estado estadoVigente, estadoNoVigente;
	
	
	@Before
	public void init() {
		
		user=new Usuario(1, "esteban", "esteban", new Rol("ADMINISTRADOR", 1));
		GestionDeUsuarios.getInstance().setUsuarioActual(user);

		claseLicencia= new ClaseLicencia("A",1);

		
		newUser=new Usuario(10, "nuevo", "nuevo", new Rol("ADMINISTRADOR", 1));
		tipoDocumento = new TipoDocumento(1, "DNI");
		grupoSanguineo = new GrupoSanguineo(1, "+", "0");
		t= new Titular("t1", "lazza", "San Martin 2515", new Date(), "36014238", tipoDocumento, grupoSanguineo, -1, claseLicencia);

		estadoNoVigente=new Estado("NO VIGENTE",2);
		estadoVigente=new Estado("VIGENTE",1);
		tipoEmision=new TipoEmision("ORIGINAL",1);
		licencia= new Licencia(t, new Date(), new Date(2030, 10, 10), user, estadoVigente, claseLicencia, true, "Testing");
		licencia.setTipoEmision(tipoEmision);
	}

//	@Test
//	public void registrarTitular() throws Throwable{
//			t= titularDAO.registrarTitular(t);
//			assertTrue(t.getId()>=1);
//				
//	}

	@Test
	public void getTitular(){
			t=titularDAO.getTitular(tipoDocumento.getId(), "36014238");
			assertNotNull(t);
	}

//	@Test
//	public void insertUsuario() throws Throwable{
//			newUser=usuarioDAO.insertUsuario(newUser);
//			assertNotNull(newUser);
//	}

	@Test
	public void getUsuario() throws SQLException{
			newUser=usuarioDAO.getUsuario(user);
			assertNotNull(newUser);
	}


	@Test
	public void getDocumentos() throws SQLException{
			Vector<TipoDocumento> lista=sistemaDAO.getDocumentos();
			assertEquals(3, lista.size());
	}

	@Test
	public void getGrupoSanguineos() throws SQLException{
			Vector<GrupoSanguineo> lista=sistemaDAO.getGruposSanguineos();
			assertEquals(8, lista.size());
	}

//	@Test
//	public void emitirLicencia() throws Throwable{
//
//		licencia=licenciaDAO.emitirLicencia(licencia);
//		
//		assertNotNull(licencia);
//	}
	
	
//	@Test
//	public void modificarLicenciaVigente() throws Throwable{
//
//		licencia=licenciaDAO.emitirLicencia(licencia);
//		
//		licencia=licenciaDAO.modifcarVigenciaLicencia(licencia);
//
//		assertEquals(estadoNoVigente.toString(), licencia.getEstado().toString());
//	}


//	@Test
//	public void buscarLicencias() throws Throwable{
//
//		t.setNroDocumento("31115172");
//		t.setId(1);
//		List<Licencia> licencias=licenciaDAO.licenciasVigentes(t);
//		System.out.println("Cantidad de licencias vigentes: "+licencias.size());
//		for (int i = 0; i < licencias.size(); i++) {
//			System.out.println(licencias.get(i).getIdLicencia() + " " + licencias.get(i).getClaseLicencia().toString());
//		}
//	}
	
	@Test
	public void buscarLicenciasAll() throws Throwable{
		TipoDocumento tipoDocumento = new TipoDocumento(1, "DNI");
		t= titularDAO.getTitular(tipoDocumento.getId(), "31115172");
		List<Licencia> licencias=licenciaDAO.getLicencias(t);
		System.out.println("Size: " + licencias.size());
		for (Licencia l: licencias) {
			System.out.println(l.toStringAll());
		}
	}

	
}
